const M_article = require('../models/article')
const util = require('../utils/index')

//  发布文章
const publish = async ctx => {
    let params = ctx.request.body

    // 文章作者校验
    if (!util.isEmpty(params.author)) {
        return util.setParam(ctx, false, '发布文章失败，文章作者不能为空！')
    }

    // 文章标题校验
    if (!util.isEmpty(params.title)) {
        return util.setParam(ctx, false, '发布文章失败，文章标题不能为空！')
    }
    if (params.title) {
        params.title = params.title.trim()

        if (params.title.length > 20) {
            return util.setParam(ctx, false, '发布文章失败，文章标题字数不能大于20字！')
        }
    }

    // 文章内容校验
    if (!util.isEmpty(params.content)) {
        return util.setParam(ctx, false, '发布文章失败，文章内容不能为空！')
    }

    // 文章来源校验
    if (!util.isEmpty(params.source)) {
        return util.setParam(ctx, false, '发布文章失败，文章来源不能为空！')
    }

    // 文章发布时间
    let create_time = util.nowDate(1)
    params.create_time = create_time

    await M_article.create(params).then(res => {
        if (res) {
            util.setParam(ctx, true, '发布文章成功！', res)
        } else {
            util.setParam(ctx, false, '发布文章失败')
        }
    }).catch(err => {
        util.setParam(ctx, false, '发布文章出现异常')
        console.log('异常信息<<<<<<<<', err);
    })
}

// 查询文章
const find = async ctx => {
    let { state = 'all', page, pageSize = 10, author, _id } = ctx.query

    if (!author) {
        return util.setParam(ctx, false, '查询出错，缺少参数：author')
    }

    if (pageSize) {
        pageSize = Number(pageSize)
    }

    if (state === 'all') {
        // 查询所有
        // 页数处理
        if (!page || isNaN(Number(page))) {
            page = 1
        } else {
            page = Number(page)
        }

        // 计算总页数
        let count = 0
        
        // 总条数
        await M_article.find({author}).count().then(res => {
            count = res
        }).catch(err => {
            console.log('查询总页数错误信息<<<<<<', err);
            return util.setParam(ctx, false, '查询总页数时出错')
        })

        // 总页数
        let total = 0
        if (count > 0) {
            total = Math.ceil(count / pageSize)
        }

        // 计算查询的页数,如果传入的页码大于总页数 -> 默认查询最后一页，传入的页码数小于0 -> 默认查询第一页
        if (total > 0 && page > total) {
            page = total
        } else if(page < 1) {
            page = 1
        }

        // 起始位置,下标
        let start = (page - 1) * pageSize

        await M_article.find({author}, {content: 0}).skip(start).limit(pageSize).then(res => {
            if (res && res.length > 0) {
                util.setParam(ctx, true, '查询成功', res, {page, pageSize, total, count})
            } else {
                util.setParam(ctx, false, '查询失败，文章不存在')
            }
        }).catch(err => {
            console.log('查询失败错误信息<<<<<<', err);
            util.setParam(ctx, false, '查询失败')
        })

    } else if (state === 'one') {
        
        if (!_id) {
            return util.setParam(ctx, false, '查询失败,参数错误：缺少id')
        }

        // 查询单条
        await M_article.findOne({_id}).then(res => {
            if (res) {
                util.setParam(ctx, true, '查询成功', res)
            } else {
                util.setParam(ctx, false, '查询失败, 文章不存在')
            }
        }).catch(err => {
            console.log('查询失败错误信息<<<<<<', err);
            util.setParam(ctx, false, '查询失败, 出现异常，可能原因：id错误')
        })
    } else {
        util.setParam(ctx, false, '参数出错')
    }
}

module.exports = {
    publish,
    find
}
